//导入响应函数
const xy = require('../utils/xy')
//导入schema
const cartModel = require('../db/cart')
const dishModel = require('../db/dish')
// 导入错误日志处理
const writeErr = require('../utils/writeErr')

//返回
module.exports = {
    //添加购物车
    async add(req, resp) {
        //获取传递过来的数据
        let {userId,dishId,number,speandkind} = req.body
        //判断一下获没获取到
        if (!userId || !dishId || !number || !speandkind) {
            xy(resp, 401, '数据不能为空！')
            return
        }
        // console.log(userId,dishId,number,speandkind)
        //在数据库中查询一下有没有
        try {
            let docs = await cartModel.findOne({
                userId,
                dishId,
                speandkind, 
            })
            if (docs) {
                //找到数据 给数量加+number
                
                //给表格中这条数据的number修改
                try {
                    docs = await cartModel.updateOne({
                        userId,
                        dishId,
                        speandkind, 
                        number: docs.number + +number
                    })
                    xy(resp, 200, '购物车添加成功')
                } catch (err) {
                    writeErr(err)
                    xy(resp, 507, '购物车添加失败')
                }
                return
            }
            try {
                docs = await cartModel.insertMany({
                    userId,
                    dishId,
                    number,
                    speandkind
                })
                xy(resp, 200, '购物车添加成功')
            } catch (err) {
                writeErr(err)
                xy(resp, 507, '购物车添加失败')
            }
        } catch (err) {
            writeErr(err)
            xy(resp, 507, '购物车添加失败')
        }
    },
    //获取当前用户购物车数量
    async getnum(req, resp) {
        //获取当前用户的id
        let {
            userId
        } = req.params
        //在表中查这个id
        //count 获取数量
        try {
            let docs = await cartModel.count({userId})
            xy(resp, 200, '购物车数量获取成功', {
                number: docs
            })
        } catch (err) {
            writeErr(err)
            xy(resp, 508, '购物车数量获取失败')
        }
    },
    //获取购物车所有商品
    async getall(req, resp) {
        //获取用户id
        let {
            userId
        } = req.params
        //在表中查找此id
        try {let docs = await cartModel.find({userId})
        //原本的数据 不能操作  对原本的数据 深拷贝
        docs =JSON.parse(JSON.stringify(docs))
        let arr = []
        docs.forEach(cart =>{
            arr.push(dishModel.findOne({_id:cart.dishId}))
        })
        //将数组放进promise.all中  等所有promise都得到结果 在一个then中处理所有
        Promise.all(arr).then(arr =>{
            docs.forEach((cart,index) =>{
                docs[index].dish = arr[index]
            })
            xy(resp, 200, '购物车商品获取成功', {
                carts: docs
            })
        }) 
        } catch (err) {
            writeErr(err)
            xy(resp, 509, '购物车商品获取失败')
        }
    }
}